// 目标：多线程并发添加哈希环节点
// TODO: 补全 add_node 方法（注意线程安全）
use std::sync::{Arc, Mutex};
use std::thread;

struct HashRing {
    nodes: Arc<Mutex<Vec<String>>>,
}

impl HashRing {
    fn new() -> Self {
        HashRing {
            nodes: Arc::new(Mutex::new(vec![])),
        }
    }

    fn add_node(&self, node: String) {
        // 你的代码（使用 Mutex 保护共享数据）
    }
}

#[test]
fn test_concurrent_add() {
    let ring = HashRing::new();
    let handles: Vec<_> = (0..3).map(|i| {
        let ring = ring.clone();
        thread::spawn(move || {
            ring.add_node(format!("Node{}", i));
        })
    }).collect();

    for h in handles {
        h.join().unwrap();
    }
    assert_eq!(ring.nodes.lock().unwrap().len(), 3);
}